package com.situ.view;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.situ.domain.FruitModel;
import com.situ.domain.ImportBillModel;
import com.situ.domain.SalesRecordModel;
import com.situ.service.FruitService;
import com.situ.service.ImportBillService;
import com.situ.service.SalesRecordService;

//1.有一个水果销售摊位，销售3种水果，重量和单价各不相同,实现多次的销售业务
//2.销售时如果为顾客为女性销售金额打8折
//3.显示当前各种水果的库存数
//4.查询全部销售记录信息
//5.加入其它水果品种
//6.添加进货单
//7.查询指定日期间隔的销售纯利润
//8.每日17::00之后为5折特价
//9.按销售数量排序显示前三名
//10.示当前各种水果的库存数，成本单价，单价，累计销售数量/金额,累计进货数量/金额

public class FruitView  implements Serializable{
    
    
    /** serialVersionUID*/  
    private static final long serialVersionUID = 11264164L;
    
    FruitService fruitService = new FruitService();
    ImportBillService importBillService = new ImportBillService();
    SalesRecordService salesRecordService = new SalesRecordService();
    
    /**
     * <p>Title: window</p>  
     * <p>Description: 水果摊位销售管理系统窗口</p>  
     * @author 恩策
     * @date 2021年7月30日
     */
    public void window(FruitView fView) {
        boolean flag = true;
        int key = '0';
        while (flag) {
            key = fView.menu();
            switch (key) {
            case '1':
                fView.sold();
                break;
            case '2':
                fView.showStock();
                break;
            case '3':
                fView.showSalesRecords();
                break;
            case '4':
                fView.addFruit();
                break;
            case '5':
                fView.goodsIn();
                break;
            case '6':
                fView.profit();
                break;
            case '7':
                fView.getTop();
                break;
            case '8':
                fView.showAllInfo();
                break;
            case '9':
                fView.setPrices();
                break;
            case '0':
                flag = false;
                System.out.println("系统退出");
                break;
            default:
                break;
            }
        }
    }
    
    /**
     * <p>Title: menu</p>  
     * <p>Description: 水果摊位销售管理系统菜单</p>  
     * @author 恩策
     * @date 2021年7月29日
     * @return
     */
    public char menu() {
        System.out.println("***********象牙村水果摊***********");
        System.out.println("1.售卖水果\t\t2.水果库存");
        System.out.println("3.销售记录\t\t4.添加水果");
        System.out.println("5.进货\t\t\t6.销售利润");
        System.out.println("7.销售排行\t\t8.摊位信息");
        System.out.println("9.设置售价\t\t0.退出系统");
        System.out.println("\t\t\t请按序号操作(0-9):");
        return TSUtility.readMenuSelection();
    }
    
    /**
     * <p>Title: sold</p>  
     * <p>Description: 1.销售水果</p>  
     * @author 恩策
     * @date 2021年7月29日
     */
    public void sold() {
        // 默认男性
        int sex = 1;
        System.out.println("你是GG还是MM？");
        if ("MM".equals(TSUtility.readKeyBoard(2, false))) {
            sex = 0;
        }
        System.out.println("共购入水果种类数：");
        int size = TSUtility.readInt();
        String[] names = new String[size];
        double[] sellingPrices = new double[size];
        double[] sellingWeights = new double[size];
        
        for (int i = 0; i < size; i++) {
            System.out.println("请输入第" + (i + 1) + "种水果名称:");
            names[i] = TSUtility.readKeyBoard(64, false);
            for (FruitModel fruit : fruitService.listFruit()) {
                if (names[i].equals(fruit.getName())) {
                    sellingPrices[i] = fruit.getSellingPrice();
                }
            }
            System.out.println("请输入第" + (i + 1) + "种水果购买量:");
            sellingWeights[i] = TSUtility.readDouble();
            
        }
        SalesRecordModel sRecordModel= new SalesRecordModel(sex, names, sellingPrices, sellingWeights);
        fruitService.sold(sRecordModel);
        salesRecordService.addSalesRecord(sRecordModel);
        // 换行
        System.out.println();
    }
    
    /**
     * <p>Title: showStock</p>  
     * <p>Description: 2.水果摊水果库存</p>  
     * @author 恩策
     * @date 2021年7月29日
     */
    public void showStock() {
        System.out.println(
                "序号" + "\t果名" + "\t库存/kg");
        for (FruitModel fruit : fruitService.listFruit()) {
            System.out.println(fruit.getId() + "\t" + fruit.getName() + "\t" + fruit.getStock());
        }
        // 换行
        System.out.println();
    }

    /**
     * <p>Title: showSalesRecords</p>  
     * <p>Description: 3.销售记录</p>  
     * @author 恩策
     * @date 2021年7月30日
     */
    public void showSalesRecords() {
        for (SalesRecordModel salesRecord : salesRecordService.listSalesRecords()) {
            System.out.println(salesRecord);
        }
        // 换行
        System.out.println();
    }
    
    /**
     * <p>Title: addFruit</p>  
     * <p>Description: 4.新添水果</p>  
     * @author 恩策
     * @date 2021年7月30日
     */
    public void addFruit() {
        String name;
        boolean flag = true;
        while (flag) {
            // 水果名不可以超过64个字符
            System.out.println("请输入新添的水果名称:");
            name = TSUtility.readKeyBoard(64, false);
            fruitService.addFruit(name);
            System.out.println("输入‘Y/y’继续设置价格, 输入‘N/n’返回主界面:");
            if('N' == TSUtility.readConfirmSelection()) {
                flag = false;
            }
        }
    }
    
    /**
     * <p>Title: goodsIn</p>  
     * <p>Description: 5.进货</p>  
     * @author 恩策
     * @date 2021年7月29日
     */
    public void goodsIn() {
        System.out.println("累计购入水果种数：");
        int size = TSUtility.readInt();
        String[] names = new String[size];
        double[] comePrices = new double[size];
        double[] comeIns = new double[size];
        for (int i = 0; i < size; i++) {
            System.out.println("请输入第" + (i + 1) + "种水果名称:");
            names[i] = TSUtility.readKeyBoard(64, false);
            System.out.println("请输入第" + (i + 1) + "种水果成本价:");
            comePrices[i] = TSUtility.readDouble();
            System.out.println("请输入第" + (i + 1) + "种水果进货量:");
            comeIns[i] = TSUtility.readDouble();
        }
  
        ImportBillModel importBill = new ImportBillModel(names, comePrices, comeIns);
        
        fruitService.goodsIn(importBill);
    }
    
    public void profit() {
        // 默认时间间隔
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("请输入开始时间日期(格式yyyy-MM-dd):");
        String startString = TSUtility.readKeyBoard(12,false);
        System.out.println("请输入截至时间日期(格式yyyy-MM-dd):");
        String endString = TSUtility.readKeyBoard(12,false);
        Date startDate = new Date();
        Date endDate = new Date();
        try {
            startDate = sdf.parse(startString);
            endDate = sdf.parse(endString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        double profit = salesRecordService.profit(startDate, endDate, fruitService);
        System.out.println("自" + sdf.format(startDate) + "到" + sdf.format(endDate) + "共获得纯利润：" + profit + "元");
    }
    
    
    /**
     * <p>Title: getTop</p>  
     * <p>Description: 7.获得销量前三的水果</p>  
     * @author 恩策
     * @date 2021年7月30日
     */
    public void getTop(){
        FruitModel[] top3 = fruitService.getTop();
        System.out.println("排名\t" + "水果\t" + "销量");
        if (top3[0] != null) {
            System.out.println(1 + "\t" + top3[0].getName() + "\t" + top3[0].getTotleSellOut());
        }
        if (top3[1] != top3[0]) {
            System.out.println(2 + "\t" + top3[1].getName() + "\t" + top3[1].getTotleSellOut());
        }
        if (top3[2] != top3[0]) {
            System.out.println(3 + "\t" + top3[2].getName() + "\t" + top3[2].getTotleSellOut());
        }
    }
    
    /**
     * <p>Title: showAllInfo</p>  
     * <p>Description: 8.摊位信息</p>  
     * @author 恩策
     * @date 2021年7月29日
     */
    public void showAllInfo() {
        System.out.println(
                "序号" + "\t果名" + "\t成本价" + "\t售价 " + "\t\t累计销售/kg" + "\t累计销售/元" + "\t累计购入/kg" + "\t累计购入/元" + "\t库存/kg");
        for (FruitModel fruit : fruitService.listFruit()) {
            System.out.println(fruit);
        }
    }
    
    /**
     * <p>Title: setPrices</p>  
     * <p>Description: 9.设置水果售价</p>  
     * @author 恩策
     * @date 2021年7月29日
     */
    public void setPrices() {
        String name;
        double sellingPrice;
        boolean flag = true;
        while (flag) {
            // 水果名不可以超过64个字符
            System.out.println("请输入被设置价格的水果名称:");
            name = TSUtility.readKeyBoard(64, false);
            // 水果费用不可以超过10位数
            System.out.println("请输入售价:");
            sellingPrice = TSUtility.readDouble();
            fruitService.setSellingPrice(name, sellingPrice);
            System.out.println("输入‘Y/y’继续设置价格, 输入‘N/n’返回主界面:");
            if('N' == TSUtility.readConfirmSelection()) {
                flag = false;
            }
        }
    }
    
    
    

}
